﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using Entidades;
using LogicaNegocio;
using System.Windows.Forms;
using AccesoBD;

namespace PresentacionEscritorio
{
    public partial class frmConsultarPacientesPorMedico : Form
    {
        public Medico oM { get; set; }
        public int idUsuarioMedico { get; set; }
        private GestorMedicos gm = new GestorMedicos();
        private GestorAgendaTurnos gAt = new GestorAgendaTurnos();
        private GestorDePaciente gP = new GestorDePaciente();
        int dia;
        TimeSpan horaActual;
        TipoModalidad TpM = null;
        public frmConsultarPacientesPorMedico()
        {
            InitializeComponent();
            DayOfWeek dt = DateTime.Today.DayOfWeek;
            establecerDia(dt);
            horaActual = DateTime.Now.TimeOfDay;

        }
        public void cargarMedico()
        {
            oM = gm.obtenerDatosPersonalesXIdUSuario(oM.UsuarioMedico.CodUsuario);

        }
        public void establecerTipoModalidadDeAtencion()
        {
            //TpM = GestorAgendaTurnos.obtenerTipoModalidadPorDiaYMedico(oM.Legajo, dia, horaActual);
            TimeSpan ha = new TimeSpan(18, 00, 00);
            TpM = GestorAgendaTurnos.obtenerTipoModalidadPorDiaYMedico(oM.Legajo, 3, ha);
            if (TpM != null)
            {
                if (TpM.CodTipoModalidad == 1)
                {
                    traerTurnosParaLaFecha();
                }
                else
                {
                    traerListadoOrdenLLegada();
                }
            }


        }
        private void establecerDia(DayOfWeek dt)
        {
            switch (dt)
            {
                case DayOfWeek.Friday:
                    dia = 6;
                    break;
                case DayOfWeek.Monday:
                    dia = 2;
                    break;
                case DayOfWeek.Saturday:
                    dia = 7;
                    break;
                case DayOfWeek.Sunday:
                    dia = 1;

                    break;
                case DayOfWeek.Thursday:
                    dia = 5;
                    break;
                case DayOfWeek.Tuesday:
                    dia = 3;
                    break;
                case DayOfWeek.Wednesday:
                    dia = 4;
                    break;
                default:
                    break;
            }

        }

        private void traerTurnosParaLaFecha()
        {

            if (grdPacientesPendientes.ColumnCount > 0)
                grdPacientesPendientes.Columns.Clear();

            //columnName, header text
            grdPacientesPendientes.Columns.Add("HoraTurno", "Hora turno");
            grdPacientesPendientes.Columns.Add("NroHC", "Nº Historia Clinica");
            grdPacientesPendientes.Columns.Add("Paciente", "Paciente");
            grdPacientesPendientes.Columns.Add("Especialidad", "Especialidad a tratar");
            grdPacientesPendientes.Columns.Add("HoraLlegada", "Hora llegada");
            grdPacientesPendientes.Columns.Add("EstadoTurno", "Estado");
            DataGridViewLinkColumn Seleccionar = new DataGridViewLinkColumn();
            Seleccionar.HeaderText = "Seleccionar";
            Seleccionar.Text = "seleccionar";
            Seleccionar.UseColumnTextForLinkValue = true;
            grdPacientesPendientes.Columns.Add(Seleccionar);

            grdPacientesPendientes.Columns.Add("IdEspecialidad", "Id Especialidad");
            grdPacientesPendientes.Columns["IdEspecialidad"].Visible = false; ;
            grdPacientesPendientes.Columns.Add("IdTurno", "Id Turno");
            grdPacientesPendientes.Columns["IdTurno"].Visible = false;
            grdPacientesPendientes.Columns.Add("idEstado","idEstado");
            grdPacientesPendientes.Columns["idEstado"].Visible = false;
            cargarGrilla();
        }


        private void cargarGrilla()
        {
            if (TpM.CodTipoModalidad == 1) //TURNOS
            {
                DateTime fecha = new DateTime(2014,11,18);
                List<Turno> listT = gAt.obtenerTurnosALaFechaPorMedico(oM.Legajo, TpM.especialidad.CodEspecialidad,fecha);

                if (listT.Count != 0)
                {
                    foreach (Turno oT in listT)
                    {
                        int i = grdPacientesPendientes.Rows.Add();
                        grdPacientesPendientes.Rows[i].Cells["HoraTurno"].Value = oT.HoraTurno;
                        grdPacientesPendientes.Rows[i].Cells["NroHC"].Value = oT.NroHCPaciente;
                        grdPacientesPendientes.Rows[i].Cells["Paciente"].Value = oT.NombrePaciente + ", " + oT.ApellidoPaciente;
                        grdPacientesPendientes.Rows[i].Cells["Especialidad"].Value = oT.nombreEspecialidad;
                        grdPacientesPendientes.Rows[i].Cells["idEspecialidad"].Value = oT.IdEspecialidad;
                        TimeSpan horaLL = (TimeSpan)oT.HoraRealLlegada;
                        grdPacientesPendientes.Rows[i].Cells["HoraLLegada"].Value = horaLL.ToString(@"hh\:mm");
                        grdPacientesPendientes.Rows[i].Cells["EstadoTurno"].Value = oT.MiEstadoTurno.Nombre;
                        grdPacientesPendientes.Rows[i].Cells["idTurno"].Value = oT.IdTurno;
                        grdPacientesPendientes.Rows[i].Cells["idEstado"].Value = oT.MiEstadoTurno.IdEstadoTurno;
                    }
                }
                else
                {
                    MessageBox.Show("El medico no posee turnos para la fecha: " + DateTime.Now.Date.ToString("dd/MM/yyyy"));
                }
            }
            else
            {
                //List<ItemListadoOrdenLlegada> lstOll = ListadosOrdenLlegada.obtenerListadoEspMedico(TpM.especialidad.CodEspecialidad, oM.Legajo, DateTime.Now);
                DateTime fch = new DateTime(2014, 10, 14);
                List<ItemListadoOrdenLlegada> lstOll = ListadosOrdenLlegada.obtenerListadoEspMedicoNoAtendidos(TpM.especialidad.CodEspecialidad, oM.Legajo, fch);
                if (lstOll != null)
                {
                    if (lstOll.Count > 0)
                    {
                        foreach (ItemListadoOrdenLlegada oLL in lstOll)
                        {
                            int i = grdPacientesPendientes.Rows.Add();
                            grdPacientesPendientes.Rows[i].Cells["NroOrden"].Value = oLL.nroOrden;
                            grdPacientesPendientes.Rows[i].Cells["NroHC"].Value = oLL.nroHCpaciente;
                            grdPacientesPendientes.Rows[i].Cells["Paciente"].Value = oLL.ApellidoNombrePaciente;
                            grdPacientesPendientes.Rows[i].Cells["Especialidad"].Value = Especialidades.ObtenerEspecialidad(oLL.IdEspecialidad).Nombre;
                        }
                    }
                    else
                    {

                    }
                }


            }



        }
        private void traerListadoOrdenLLegada()
        {

            if (grdPacientesPendientes.ColumnCount > 0)
                grdPacientesPendientes.Columns.Clear();
            //columnName, header text
            grdPacientesPendientes.Columns.Add("NroOrden", "Número Orden");
            grdPacientesPendientes.Columns.Add("NroHC", "Numero HC");
            grdPacientesPendientes.Columns.Add("Paciente", "Paciente");
            grdPacientesPendientes.Columns.Add("Especialidad", "Especialidad");
            grdPacientesPendientes.Columns.Add("HoraLlegada", "Hora llegada");
            DataGridViewLinkColumn Seleccionar = new DataGridViewLinkColumn();
            Seleccionar.HeaderText = "Seleccionar";
            Seleccionar.Text = "Seleccionar";
            Seleccionar.UseColumnTextForLinkValue = true;
            grdPacientesPendientes.Columns.Add(Seleccionar);
            grdPacientesPendientes.Columns["NroOrden"].Visible = false;
            cargarGrilla();
        }


        private void frmConsultarPacientesPorMedico_Load(object sender, EventArgs e)
        {
            txtFechaHoraActual.Text = DateTime.Now.ToString();
        }

        private void grdPacientesPendientes_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (grdPacientesPendientes.CurrentCell.OwningColumn.HeaderText.Equals("Seleccionar"))
            {
                Pacientess ps = new Pacientess();
                long hc = long.Parse(grdPacientesPendientes.Rows[e.RowIndex].Cells["NroHC"].Value.ToString());
                Paciente oP = ps.buscarPaciente(hc);

                string especialidad = grdPacientesPendientes.Rows[e.RowIndex].Cells["Especialidad"].Value.ToString();
                oM.especialidad = new Especialidad();
                oM.especialidad.CodEspecialidad = TpM.especialidad.CodEspecialidad;
                oM.especialidad.Nombre = especialidad;

                frmActualizarHistoriaClinica frmHC = new frmActualizarHistoriaClinica();
                frmHC.timpoModalidad = TpM;

                if (TpM.CodTipoModalidad == 1)
                {
                    frmHC.idTurno = long.Parse(grdPacientesPendientes.Rows[e.RowIndex].Cells["idTurno"].Value.ToString());
                    frmHC.idEstadoTurno = int.Parse(grdPacientesPendientes.Rows[e.RowIndex].Cells["idEstado"].Value.ToString());    
                }
                else
                {
                    frmHC.idOrdenLLegada = long.Parse(grdPacientesPendientes.Rows[e.RowIndex].Cells["NroOrden"].Value.ToString());
                }


                frmHC.oP = oP;
                frmHC.oM = this.oM;
                frmHC.ShowDialog();
            }

        }
        //VER PACIENTES EN ESPERA
        private void btnVerPacientesEspera_Click(object sender, EventArgs e)
        {
            traerTurnosParaLaFecha();
        }//FIN METODO
    }
}
